package DesignPatterns.Singleton;

/**
 * 单例模式-静态内部类单例模式
 * JVM 保证单例
 * 加载内部类时是不会加载内部类的,这样可以是实现加载
 *
 * @author yangjicong
 * @date 2022/7/9
 */
public class Singleton4 {
    /**
     *这里尽量加上volatile
     */
    private volatile static Singleton4 INSTANCE;

    private Singleton4(){ }

    public static class Singleton4Holder{
        private final static  Singleton4 INSTANCE = new Singleton4();
    }

    public static Singleton4 getInstance(){
        return Singleton4Holder.INSTANCE;
    }

    /**
     * 线程安全,如下案例
     * @param args
     */
    public static void main(String[] args) {
        //不同对象的hashcode是不同的
        for (int i = 0; i < 100; i++) {

            new Thread(()-> System.out.println(Singleton4.getInstance().hashCode())).start();
        }
    }

}
